# Compilacion para entrega
all: capafisica capaindices capametadata capaconsulta

# Compilacion incluyendo proyectos de prueba
test: capafisica capaindices capametadata capaconsulta capaindices_lib comunicacionprueba comunprueba tester

# Liberias comunes a todas las capas
comun:
	g++ Comun/Archivo.cpp -c -ggdb -DDEBUG -fno-inline -o bin/Archivo.o
	g++ Comun/Clase.cpp -c -ggdb -DDEBUG -fno-inline -o bin/Clase.o
	g++ Comun/Condiciones.cpp -c -ggdb -DDEBUG -fno-inline -o bin/Condiciones.o
	g++ Comun/ConversorDeStreamsConsulta.cpp -c -ggdb -DDEBUG -fno-inline -o bin/ConversorDeStreamsConsulta.o
	g++ Comun/ConversorDeStreams.cpp -c -ggdb -DDEBUG -fno-inline -o bin/ConversorDeStreams.o
	g++ Comun/Operacion.cpp -c -ggdb -DDEBUG -fno-inline -o bin/Operacion.o
	g++ Comun/Sort.cpp -c -ggdb -DDEBUG -fno-inline -o bin/Sort.o
	g++ Comun/MetadataClase.cpp -c -ggdb -DDEBUG -fno-inline -o bin/MetadataClase.o

# Compilacion de la capa fisica (depende de comun)
capafisica: comun
	g++ bin/Archivo.o bin/Clase.o bin/Condiciones.o bin/ConversorDeStreamsConsulta.o bin/ConversorDeStreams.o bin/Operacion.o bin/Sort.o bin/MetadataClase.o CapaFisica/Serializador.cpp CapaFisica/Contenedor.cpp CapaFisica/ArchivoEnDisco.cpp CapaFisica/ManejadorEspacioLibre.cpp CapaFisica/MapaDeBits.cpp CapaFisica/MapaExtension.cpp CapaFisica/AdministradorDeArchivos.cpp CapaFisica/ConexionCapaIndices.cpp CapaFisica/CapaFisica.cpp -o bin/CapaFisica -ggdb -DDEBUG -fno-inline

# Compilacion de la capa de indices (depende de comun y de la capa fisica)
capaindices: comun capafisica
	g++ bin/Archivo.o bin/Clase.o bin/Condiciones.o bin/ConversorDeStreamsConsulta.o bin/ConversorDeStreams.o bin/Operacion.o bin/Sort.o bin/MetadataClase.o CapaIndices/HidratadorMetadataClase.cpp CapaIndices/ConexionCapaFisica.cpp CapaIndices/Indices.cpp CapaIndices/ArchivoRLV.cpp CapaIndices/ArchivoRF.cpp CapaIndices/Secuencial.cpp CapaIndices/HashExtensible.cpp CapaIndices/Estrategia.cpp CapaIndices/EstrategiaBusqueda.cpp CapaIndices/EstrategiaBorrado.cpp CapaIndices/EstrategiaInsercion.cpp CapaIndices/EstrategiaActualizacion.cpp CapaIndices/Nodos.cpp CapaIndices/temp.cpp CapaIndices/Operacion.cpp CapaIndices/MetadataOperacion.cpp CapaIndices/ArbolBMas.cpp CapaIndices/CapaIndices.cpp -o bin/CapaIndices -ggdb -DDEBUG -fno-inline

# Compilacion de la capa de metadata (depende de comun y de la capa de indices)
capametadata: comun capaindices
	g++ bin/Archivo.o bin/Clase.o bin/Condiciones.o bin/ConversorDeStreamsConsulta.o bin/ConversorDeStreams.o bin/Operacion.o bin/Sort.o bin/MetadataClase.o CapaMetadata/Integridad.cpp CapaMetadata/ConexionCapaIndices.cpp CapaMetadata/ConexionCapaConsulta.cpp CapaMetadata/CapaMetadata.cpp -o bin/CapaMetadata -ggdb -DDEBUG -fno-inline

# Compilacion de la capa de resolucion de consultas (depende de comun y de la capa de metadata)
capaconsulta: comun capametadata
	g++ bin/Archivo.o bin/Clase.o bin/Condiciones.o bin/ConversorDeStreamsConsulta.o bin/ConversorDeStreams.o bin/Operacion.o bin/Sort.o bin/MetadataClase.o CapaConsulta/AdministradorMetadata.cpp CapaConsulta/ParseadorComandos.cpp CapaConsulta/ParseadorEjecucion.cpp CapaConsulta/ParseadorCreacion.cpp CapaConsulta/ParseadorBorrado.cpp CapaConsulta/ParseadorActualizacion.cpp CapaConsulta/ParseadorInsercion.cpp CapaConsulta/ParseadorSeleccion.cpp CapaConsulta/EjecutarComando.cpp CapaConsulta/CreacionClase.cpp CapaConsulta/Seleccion.cpp CapaConsulta/Insercion.cpp CapaConsulta/Borrado.cpp CapaConsulta/Actualizacion.cpp CapaConsulta/AdministradorDeOperaciones.cpp CapaConsulta/ConexionCapaMetadata.cpp CapaConsulta/InterpreteUsuario.cpp CapaConsulta/CapaConsulta.cpp -o bin/CapaConsulta -ggdb -DDEBUG -fno-inline

# Compilacion de la capa indices como librerias para probar la comunicacion
capaindices_lib: comun capafisica
	g++ CapaIndices/ConexionCapaFisica.cpp -c -ggdb -DDEBUG -fno-inline -o bin/ConexionCapaFisica.o
	g++ CapaIndices/ArchivoRLV.cpp -c -ggdb -DDEBUG -fno-inline -o bin/ArchivoRLV.o
	g++ CapaIndices/ArchivoRF.cpp -c -ggdb -DDEBUG -fno-inline -o bin/ArchivoRF.o

# Compilacion de las pruebas de comunicacion entre capas
comunicacionprueba: comun capafisica capaindices_lib
	g++ bin/Archivo.o bin/Operacion.o bin/ConversorDeStreams.o bin/ArchivoRF.o bin/ArchivoRLV.o bin/ConexionCapaFisica.o ComunicacionPrueba/ComunicacionPrueba.cpp -o bin/ComunicacionPrueba -ggdb -DDEBUG -fno-inline

# Compilacion de las pruebas de la capa comun
comunprueba: comun
	g++ bin/Archivo.o bin/Condiciones.o bin/sort.o bin/Operacion.o bin/ConversorDeStreams.o ComunPrueba/ArchivoEnMemoria.cpp ComunPrueba/ComunPrueba.cpp -o bin/ComunPrueba -ggdb -DDEBUG -fno-inline

# Compilacion de la aplicacion de testing
tester:
	g++ Tester/Tester.cpp -o bin/Tester -ggdb -DDEBUG -fno-inline